<?php

/**
 * Description of RepoDetalleComprobante
 *
 * @author  Mariano Renkine
 * @author  Fernando Arau
 */
class RepoDetalleComprobante extends Repositorio
{

  function __construct()
  {
    $this->tabla = "detalle_comprobante";
    $this->id = "idDetalleComprobante";
  }

  function agregar(DetalleComprobante $detalleComprobante)
  {
    try
    {
      $query = "INSERT INTO " . $this->tabla . "(nroItem, cantidad, comprobante,";
      if ($detalleComprobante->getProducto() != null){
        $query .= "producto,";
      }
      $query .= "descuento, descripcion, precioUnitario) values (";
      $query .= $detalleComprobante->getNroItem() . ", ";
      $query .= $detalleComprobante->getCantidad() . ", ";
      $query .= $detalleComprobante->getComprobante() . ", ";
      if ($detalleComprobante->getProducto() != null){
        $query .= $detalleComprobante->getIdProducto() . ", ";
      }
      $query .= $detalleComprobante->getDescuento() . ", ";
      $query .= "'" . $detalleComprobante->getDescripcion() . "', ";
      $query .= $detalleComprobante->getPrecioUnitario(). ") ";
      $result = $this->PostSQL($query);
      return $result;
    } catch (Exception $ex)
    {
      return $ex;
    }
  }

  function modificar(DetalleComprobante $detalleComprobante)
  {
    try
    {
      $link = $this->OpenDB();
      $this->beginTransaction();
      $query = "UPDATE " . $this->tabla . " SET ";
      $query .= "cantidad = '" . $detalleComprobante->getCantidad() . "', ";
      $query .= "producto = " . $detalleComprobante->getIdProducto() . ", ";
      $query .= "descuento = " . $detalleComprobante->getDescuento() . ", ";
      $query .= "precioUnitario = " . $detalleComprobante->getPrecioUnitario();
      $query .= "WHERE comprobante = " . $detalleComprobante->getIdComprobante();
      $query .= "and nroItem = " . $detalleComprobante->getNroItem();
      $result = $this->PostSQL($query);
      $this->commitTransaction();
      $this->CloseDB($link);
      return $result;
    } catch (Exception $ex)
    {
      return $ex;
    }
  }

  public function buscarDetalles($idComprobante)
  {
    $link = $this->OpenDB();
    $query = "SELECT idDetalleComprobante, nroItem, cantidad, producto, descuento, CONVERT(BIGINT, version) AS version, descripcion, precioUnitario FROM " . $this->tabla;
    $query .= " WHERE comprobante = " . $idComprobante;
    $detalles = $this->GetSQL($query);
    $this->CloseDB($link);
    $repoProducto = new RepoProducto();
    if ($detalles)
    {
      $detallesComprobante = array();
      for ($i = 0; $i < count($detalles); $i++)
      {
        $detallesComprobante[$i] = new DetalleComprobante();
        $detallesComprobante[$i]->setCantidad($detalles[$i]->cantidad);
        $detallesComprobante[$i]->setNroItem($detalles[$i]->nroItem);
        $detallesComprobante[$i]->setId($detalles[$i]->idDetalleComprobante);
        if ($detalles[$i]->producto){
            $detallesComprobante[$i]->setProducto($repoProducto->buscar($detalles[$i]->producto));
        }
        $detallesComprobante[$i]->setDescripcion($detalles[$i]->descripcion);
        $detallesComprobante[$i]->setDescuento($detalles[$i]->descuento);
        $detallesComprobante[$i]->setVersion($detalles[$i]->version);
        $detallesComprobante[$i]->setPrecioUnitario($detalles[$i]->precioUnitario);
      }
      return $detallesComprobante;
    }
    return null;
  }

  function aDTO(DetalleComprobante $detalleComprobante)
  {
    $detCompDTO = new DetalleComprobanteDTO();
    $detCompDTO->setCantidad($detalleComprobante->getCantidad());
    $detCompDTO->setDescuento($detalleComprobante->getDescuento());
    $detCompDTO->setId($detalleComprobante->getId());
    $detCompDTO->setNroItem($detalleComprobante->getNroItem());
    $productoServicios = new ProductoServicios();
    $detCompDTO->setProducto($productoServicios->aDTO($detalleComprobante->getProducto()));
    return $detCompDTO;
  }

  function deDTO(DetalleComprobanteDTO $detCompDTO)
  {
    $detalleComprobante = new DetalleComprobante();
    $detalleComprobante->setCantidad($detCompDTO->getCantidad());
    $detalleComprobante->setDescuento($detCompDTO->getDescuento());
    $detalleComprobante->setId($detCompDTO->getId());
    $detalleComprobante->setNroItem($detCompDTO->getNroItem());
    $productoServicios = new ProductoServicios();
    $detalleComprobante->setProducto($productoServicios->deDTO($detCompDTO->getProducto()));
    return $detalleComprobante;
  }

}

?>
